package proceso.carga.pozo;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.StringTokenizer;

import jxl.Sheet;
import jxl.Workbook;
import jxl.read.biff.BiffException;


import modelo.general.Persona;
import modelo.pozo.PozoProduccion;
import modelo.propiedad.Organismo;
import modelo.propiedad.PersonaJuridica;
import modelo.propiedad.Propiedad;
import modelo.propiedad.Propietario;
import modelo.propiedad.RegistroPropietario;

/**
 * 
 * @author edgar
 * Clase de procesos para leer los datos basicos de una listaa de pozos
 */

public class LectorPozoProduccion {
	
	private List<Propietario> listaPropietario = new ArrayList<Propietario>();
	private List<Propiedad> listaPropiedad = new ArrayList<Propiedad>();
	private List<PozoProduccion> listaPozo = new ArrayList<PozoProduccion>();
	private List<Persona> listaPersona = new ArrayList<Persona>();
	private List<Organismo> listaOrganismo = new ArrayList<Organismo>();
	private List<PersonaJuridica> listaPersonaJuridica = new ArrayList<PersonaJuridica>();
	private List<RegistroPropietario> listaRegistro = new ArrayList<RegistroPropietario>();
	private String error;
	
	
	public List<Propietario> getListaPropietario() {
		return listaPropietario;
	}
	public void setListaPropietario(List<Propietario> listaPropietario) {
		this.listaPropietario = listaPropietario;
	}

	public List<Propiedad> getListaPropiedad() {
		return listaPropiedad;
	}
	public void setListaPropiedad(List<Propiedad> listaPropiedad) {
		this.listaPropiedad = listaPropiedad;
	}

	public List<PozoProduccion> getListaPozo() {
		return listaPozo;
	}
	public void setListaPozo(List<PozoProduccion> listaPozo) {
		this.listaPozo = listaPozo;
	}
	
	public List<Persona> getListaPersona() {
		return listaPersona;
	}
	public void setListaPersona(List<Persona> listaPersona) {
		this.listaPersona = listaPersona;
	}
	public List<Organismo> getListaOrganismo() {
		return listaOrganismo;
	}
	public void setListaOrganismo(List<Organismo> listaOrganismo) {
		this.listaOrganismo = listaOrganismo;
	}
	public List<PersonaJuridica> getListaPersonaJuridica() {
		return listaPersonaJuridica;
	}
	public void setListaPersonaJuridica(List<PersonaJuridica> listaPersonaJuridica) {
		this.listaPersonaJuridica = listaPersonaJuridica;
	}
	public String getError() {
		return error;
	}
	public void setError(String error) {
		this.error = error;
	}

	public boolean leer(String nombreArchivo, int nroHoja) {
		int idCIDIAT;
		String codigo, nombrePropiedad, nombrePropietario, apellido;
		double este, norte, canoaEste, canoaNorte;
		int posicion, tipoPropietario;
		StringTokenizer tokens;
		
		try {
			Workbook archivoExcel = Workbook.getWorkbook(new File(nombreArchivo));
			Sheet hoja = archivoExcel.getSheet(nroHoja);

			for(int i = 3; i<hoja.getRows(); i++) {
//				System.out.println( " leyendo " + i);
				PozoProduccion pozo = new PozoProduccion();
				pozo.inicializarPozo();
				listaPozo.add(pozo);
				idCIDIAT = Integer.parseInt(hoja.getCell(0,i).getContents());
				pozo.setIdCIDIAT(idCIDIAT);
				pozo.setCodigo(hoja.getCell(1,i).getContents());
				nombrePropiedad = hoja.getCell(2,i).getContents();
				nombrePropiedad = nombrePropiedad.trim();			
				boolean nuevaPropiedad = true;
				posicion=-1;
				for(int j = 0; j<listaPropiedad.size();j++){
					if(nombrePropiedad.compareTo(listaPropiedad.get(j).getNombre())== 0) {
						nuevaPropiedad=false;
						posicion = j;
						break;
					}
				}
				if(nuevaPropiedad) {
					Propiedad propiedad = new Propiedad();
					propiedad.setNombre(nombrePropiedad);
					propiedad.inicializarRegistroPropietario();
					propiedad.inicializarListaPozos();
					listaPropiedad.add(propiedad);
					// crear la tabla de relacion con el propietario
					RegistroPropietario registro = new RegistroPropietario();
					registro.setPropiedad(propiedad);
					propiedad.agregarRegistroPropietario(registro);
					posicion = listaPropiedad.size() -1;
				}
				pozo.setUbicacion(listaPropiedad.get(posicion));
				listaPropiedad.get(posicion).agregarPozo(pozo);
				nombrePropietario = hoja.getCell(3,i).getContents();;
				tipoPropietario = Integer.parseInt(hoja.getCell(4,i).getContents());
				
				if(nuevaPropiedad) {
					// revisar si el propietario existe.
					boolean nuevoPropietario = true;
					int posicionPropietario = 0;
					for(int j=0; j<listaPropietario.size(); j++){
						posicionPropietario = j;
						if(nombrePropietario.compareTo(listaPropietario.get(j).getNombreProvisional()) == 0 ) {
							nuevoPropietario = false;
							break;
						}
					}
					if(nuevoPropietario) {
						Propietario propietario = new Propietario();
						propietario.setNombreProvisional(nombrePropietario);
						listaPropietario.add(propietario);
						posicionPropietario = listaPropietario.size()-1;
						switch(tipoPropietario) {
						case 1: 
							tokens = new StringTokenizer(nombrePropietario,",");
							nombrePropietario = tokens.nextToken();
							nombrePropietario = nombrePropietario.trim();
							apellido = tokens.nextToken();
							apellido = apellido.trim();
							Persona persona = new Persona();
							persona.setNombres(nombrePropietario);
							persona.setApellidos(apellido);
							propietario.setPersonaNatural(true);
							propietario.setPersona(persona);
							listaPersona.add(persona);
							break;
						case 2:
							PersonaJuridica personaJuridica = new PersonaJuridica();
							personaJuridica.setNombre(nombrePropietario);
							propietario.setPersonaJuridica(true);
							propietario.setPersJuridica(personaJuridica);
							listaPersonaJuridica.add(personaJuridica);
							break;
						case 3:
							Organismo organismo = new Organismo();
							organismo.setNombre(nombrePropietario);
							propietario.setOrganismoOficial(true);
							propietario.setOrganismo(organismo);
							listaOrganismo.add(organismo);
							break;
						
						}
						
	
					}
//					System.out.println("posicion propiedad " + posicion + " posicion propietario " + posicionPropietario);
					listaPropiedad.get(posicion).getListaRegistro().get(0).setPropietario(listaPropietario.get(posicionPropietario));
				}
				String aux;
				if(hoja.getCell(6,i).getContents().length() >0)	{
					aux = hoja.getCell(7,i).getContents();
					aux = aux.replace(",", ".");
					canoaEste = Double.parseDouble(aux);
					aux = hoja.getCell(8,i).getContents();
					aux = aux.replace(",", ".");
					canoaNorte = Double.parseDouble(aux);
					este = Double.parseDouble(hoja.getCell(5,i).getContents());
					norte = Double.parseDouble(hoja.getCell(6,i).getContents());
					pozo.setEste(este);
					pozo.setNorte(norte);
					pozo.setCanoaEste(canoaEste);
					pozo.setCanoaNorte(canoaNorte);
				}			
			}
			
		} catch (BiffException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			error = " Error en lectura";
			return false;
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			error = " Archivo no encontrado";
			return false;
	
		}
		
		return true;
	}
	private String formatoNumIngles(String entrada) {
		String resultado;
		
		if(entrada.indexOf(",") != -1){
			
		}
		
		return null;
	}
}
